class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

public class isSubStructure {
    // 双重DFS
    public boolean _isSubStructure(TreeNode A, TreeNode B) {
        if (A == null || B == null)
            return false;

        // 比较当前的
        if (dfs(A, B))
            return true;

        // 当前不符合，则递归比较左右子树
        if (_isSubStructure(A.left, B))
            return true;
        // 左侧不能符合就比较右侧的 递归进去
        if (_isSubStructure(A.right, B))
            return true;
        // 当前、左侧、右侧均不符合 则为false
        return false;

    }

    public boolean dfs(TreeNode A, TreeNode B) {
        // 终止的三个条件
        if (B == null)
            return true;//
        if (A == null)
            return false;
        if (A.val != B.val)
            return false;

        return dfs(A.left, B.left) && dfs(A.right, B.right);
    }
}
